#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    // 容器 vector 动态数组
    // 初始化
    vector<int> v1(6);  //size为6
    // vector<int> v1{6};  //初始化
    
    vector<char> v2;
    // vector<string> v3;
    vector<string> v3 = {"hello", "hey", "bye"};
    // 预留存储空间，开空间的
    v1.reserve(13);
    // 会插入到指定位置
    v1.insert(v1.begin(), 666);
    // 反向迭代器 从最后一个元素往前遍历 ++
    // 遍历的时候也是++，就是往前走
    v1.rbegin();
    v1.rend();

    // 获取第一个元素 
    v1.front();
    

    cout << v1.size() << "\t" << v1.capacity() << "\t" << v1.max_size() << endl;
    cout << v1[0] << endl;
    cout << v1.at(0) << endl;

    for(int i = 0; i < v1.capacity(); i++)
    {
        // vector.at() 也是访问数组元素，at有安全检查
        // cout << v1.at(i) << "   " ;
        cout << v1[i] << "  ";
    }
    cout << endl;

    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);
    v1.push_back(600);

    cout << v1.size() << "\t" << v1.capacity() << "\t" << v1.max_size() << endl;
    cout << v1[0] << endl;
    cout << v1.at(0) << endl;

    // 范围 只读 无法改变容器内容值
    for(auto &e : v1)
    {
        // *e = 2; // error
        cout << e << ",";
    }
    cout << endl;
    // 获得迭代器
    // v1.begin()
    auto it1 = v1.begin();
    // v1.erase(it1);
    v1.erase(v1.begin());

    return 0;
}
